//定义领用方管理的类型

export interface ResponseData {
    status: number
    success?: {
        message: string
    }
    error?: {
        message: string
        code: number
    }
}

// 大类表相关
// ===================================

// 大类表
export interface BigInfo {
    readonly id: number
    big_name: string
    prefix: string
    total: number
    use: boolean
}

// 小类表
export interface SmallInfo {
    readonly id: number, // 小类表自增主键
    big: number, // 该小类所属的大类的id
    no: string, // 小类编号 aa000001
    big_name: string,
    small_name: string, // 小类名称
    model: string, // 型号
    unit_price: number, // 单价
    number: number, // 数量
    total: number, // 总价
    units: string, // 单位
    use: boolean, // 是否使用
    place: string, // 存放地点
    last_use_date_str: string, // 最后使用日期
    create_date_str: string, // 创建日期
    real_unit_price: number // 最新价值
}

// 大类列表增删改查 携带参数
export interface BigTableCRUD {
    mode: 'create' | 'delete' | 'update' | 'read'
    // search
    create?: {
        big_name: string
        prefix: string
    }
    delete?: {
        id: number
        big_name: string
    }
    update?: {
        id: number
        big_name: string
        prefix: string
    }
    read?: {
        use: string
        start: number
        stop: number
    }
}

// 大类列表增删改查 返回参数
export interface BigTableCRUDResponse extends ResponseData {
    create?: number
    delete?: {}
    update?: {}
    read?: {
        big_list: BigInfo[]
        total: number
    }
}

// 小类表增删改查，携带参数
export interface SmallTableCRUD {
    mode: 'create' | 'delete' | 'update' | 'read'
    // search
    create?: {
        no: string
        small_name: string
        models: string
        units: string
        place: string
        big_id: number
    }
    delete?: {
        small_id: number
    }
    update?: {
        small_name: string
        small_id: number
        no: string
        models: string
        units: string
        place: string
        big_id: number
    }
    read?: {
        mode: 'big' | 'small'
        id: number | undefined
        start: number
        stop: number
        use: "启用" | "未启用" | "全部"
    }
}

// 小类表增删改查，返回参数
export interface SmallTableCRUDResponse extends ResponseData {
    create?: {
        id: number
        date: string
    }
    delete?: {}
    update?: {}
    read?: {
        small_list: SmallInfo[]
        total: number
        big_name: string
        prefix: string
        id: number
    }
}

//------------------------------------------------
// 5. 时间和数量检查 携带参数。但是相关文件位于小类处理中
//------------------------------------------------
export interface LocationCheck {
    mode: '时间' | '数量',
    big_id: number | '',
    num?: number,
    date_start?: string,
    start: number
    stop: number
}

// 时间和数量检查 返回参数
export interface LocationCheckResponse extends ResponseData {
    data: {
        data: SmallInfo[]
        total: number
    }
}

// 大类和小类停用 携带参数
export interface BigOrSmallStopUse {
    mode: 'big' | 'small'
    big?: {
        id: number
        use: boolean
    }
    small?: {
        id: number
        use: boolean
    }
}


// 大类停用 返回参数
export interface BigOrSmallStopUseResponse extends ResponseData {

}

// 明细表添加记录时需要传回的参数类型
export interface record_list {
    actual_date: string
    handle: number | string
    change: string | number | null
    unit_price: string | number | null

    trend: boolean | string
    remarks: string
    small: number | string
    index: number | string
    operator: string
}

// 明细表（record）的增删改查 携带参数
export interface RecordTableCRUD {
    mode: 'create' | 'delete' | 'update' | 'read'
    // search
    create?: {
        list: record_list[]
    }
    delete?: {
        record_id: number
        operator: string
    }
    update?: {
        record_id: number
        operator: string
        actual_date: string
        change: number
        unit_price: number
        trend: boolean
        remarks: string
        handle_id: number
    }
    read?: {
        small_id: number | string
        handle_id: number | string
        in_out: '出库' | '入库' | '全部'
        start_date: string
        stop_date: string
        start: number
        stop: number
    }
}
// 创建记录功能的返回参数
export  interface RecordCreateResponse {
    index: number
    success?: string
    error?: string
}

// 明细表增删改查 返回参数
export interface RecordTableCRUDResponseData extends ResponseData{
    create?: RecordCreateResponse[]
    delete?: {}
    update?: {} // 每次只能修改一个记录，无需进行返回
    read?: {
        record_list: RecordInfo[]
        total: number
    }
}

export interface RecordInfo {
    readonly id: number,  // id主键
    no: string // 所属小类编号
    actual_date_str: string,  // 出入库操作的实际发生日期

    change: string, // 数量
    unit_price: string, // 加权单价
    real_unit_price: string  // 实际单价
    total: string, // 总价
    last_number: string //  该操作执行后的库存

    trend: boolean // 入库为false，出库为true
    units: string  // 单位
    operator: string  // 添加记录的角色
    operate_date_str: string // 添加的时间
    remarks: string  // 备注
    small__model: string // 规格型号

    big: number,  // 外键大类表id
    small: number,  // 外键 小类表id
    handle: number, // 处理方

    big_name: string,  // 大类名称
    small_name: string,  // 小类名称
    handle_name: string, // 处理方名车鞥
}


// 入库出库单集体增加
// export interface InOutOrder {
//     big_id: number | string
//     small_id: number | string
//     handle_id: number | string
//     index: number
//
//     big_name: string
//     small_name: string
//     no: string
//     actual_date: string | null
//     handle_name: string
//     change: number | string
//     unit_price: string | number
//     trend: '' | boolean
//     remarks: string
//     units: string
//     model: string
//     number: number | string
//
//     content_value: string
//     type_value: "primary" | "success" | "warning" | "danger" | "info" | ""
// }

// 入库出库单集体增加
export interface InOut2 {
    big_id: number | string
    small_id: number | string
    handle_id: number | string
    index: number

    big_name: string
    small_name: string
    no: string
    actual_date: string | null
    handle_name: string

    change: string
    unit_price: string
    total: string

    trend: '' | boolean
    remarks: string
    units: string
    model: string
    number: number | '/'

    content_value: string
    type_value: "primary" | "success" | "warning" | "danger" | "info" | ""

    small_no_temp: string,
    handle_name_temp: string,
    small_name_temp: string,
    model_temp: string
}